/**
 * 数据资产管理 API
 */

import { request } from '@/service/request';

/** 资产类型 */
export enum AssetType {
  TABLE = 'TABLE',
  VIEW = 'VIEW',
  API = 'API',
  REPORT = 'REPORT'
}

/** 资产分级 */
export enum AssetLevel {
  PUBLIC = 'PUBLIC',
  INTERNAL = 'INTERNAL',
  CONFIDENTIAL = 'CONFIDENTIAL',
  SECRET = 'SECRET'
}

/** 资产状态 */
export enum AssetStatus {
  DRAFT = 'DRAFT',
  PUBLISHED = 'PUBLISHED',
  ARCHIVED = 'ARCHIVED',
  DESTROYED = 'DESTROYED'
}

/** 数据资产实体 */
export interface DataAsset {
  /** ID */
  id?: number;
  /** 资产名称 */
  name: string;
  /** 资产类型 */
  assetType: AssetType;
  /** 分类ID */
  categoryId?: number;
  /** 分类名称 */
  categoryName?: string;
  /** 分级标识 */
  level?: AssetLevel;
  /** 状态 */
  status?: AssetStatus;
  /** 描述 */
  description?: string;
  /** 来源类型 */
  sourceType?: string;
  /** 来源ID */
  sourceId?: number;
  /** 标签列表 */
  tags?: string;
  /** 元数据信息 */
  metadata?: string;
  /** 使用次数 */
  useCount?: number;
  /** 最后使用时间 */
  lastUseTime?: string;
  /** 项目ID */
  projectId?: number;
  /** 备注 */
  remark?: string;
  /** 创建时间 */
  createTime?: string;
  /** 更新时间 */
  updateTime?: string;
}

/** 资产分类实体 */
export interface AssetCategory {
  /** ID */
  id?: number;
  /** 父分类ID */
  parentId?: number;
  /** 分类名称 */
  name: string;
  /** 分类编码 */
  code?: string;
  /** 层级 */
  level?: number;
  /** 排序 */
  sortOrder?: number;
  /** 图标 */
  icon?: string;
  /** 描述 */
  description?: string;
  /** 状态 */
  status?: number;
  /** 项目ID */
  projectId?: number;
  /** 子分类列表 */
  children?: AssetCategory[];
  /** 资产数量 */
  assetCount?: number;
}

/** 数据资产查询参数 */
export interface DataAssetQuery {
  /** 页码 */
  pageNum?: number;
  /** 每页数量 */
  pageSize?: number;
  /** 资产名称 */
  name?: string;
  /** 资产类型 */
  assetType?: AssetType;
  /** 分类ID */
  categoryId?: number;
  /** 分级标识 */
  level?: AssetLevel;
  /** 状态 */
  status?: AssetStatus;
  /** 项目ID */
  projectId?: number;
}

/** 资产统计信息 */
export interface AssetStatistics {
  /** 总资产数 */
  totalCount: number;
  /** 已发布资产数 */
  publishedCount: number;
  /** 草稿资产数 */
  draftCount: number;
  /** 已归档资产数 */
  archivedCount: number;
  /** 按类型统计 */
  typeCount: Record<string, number>;
  /** 按分级统计 */
  levelCount: Record<string, number>;
  /** 按分类统计 */
  categoryCount: Record<string, number>;
  /** 最近使用的资产 */
  recentlyUsedCount: number;
}

/**
 * 查询数据资产列表
 */
export function getDataAssetList(params: DataAssetQuery) {
  return request<Api.Common.PaginatingQueryRecord<DataAsset>>({
    url: '/dataplatform/asset/list',
    method: 'get',
    params
  });
}

/**
 * 查询数据资产详情
 */
export function getDataAsset(id: number) {
  return request<DataAsset>({
    url: `/dataplatform/asset/${id}`,
    method: 'get'
  });
}

/**
 * 新增数据资产
 */
export function addDataAsset(data: DataAsset) {
  return request<number>({
    url: '/dataplatform/asset',
    method: 'post',
    data
  });
}

/**
 * 修改数据资产
 */
export function updateDataAsset(data: DataAsset) {
  return request<void>({
    url: '/dataplatform/asset',
    method: 'put',
    data
  });
}

/**
 * 删除数据资产
 */
export function deleteDataAsset(ids: number | number[]) {
  return request<void>({
    url: `/dataplatform/asset/${ids}`,
    method: 'delete'
  });
}

/**
 * 更新资产状态
 */
export function updateAssetStatus(id: number, status: AssetStatus) {
  return request<void>({
    url: `/dataplatform/asset/${id}/status`,
    method: 'put',
    params: { status }
  });
}

/**
 * 增加使用次数
 */
export function incrementUseCount(id: number) {
  return request<void>({
    url: `/dataplatform/asset/${id}/use`,
    method: 'post'
  });
}

/**
 * 搜索数据资产
 */
export function searchAssets(keyword: string, pageNum?: number, pageSize?: number) {
  return request<Api.Common.PaginatingQueryRecord<DataAsset>>({
    url: '/dataplatform/asset/search',
    method: 'get',
    params: { keyword, pageNum, pageSize }
  });
}

/**
 * 获取资产统计信息
 */
export function getAssetStatistics(projectId?: number) {
  return request<AssetStatistics>({
    url: '/dataplatform/asset/statistics',
    method: 'get',
    params: { projectId }
  });
}

/**
 * 按分类统计资产数量
 */
export function countByCategory(projectId?: number) {
  return request<Record<string, number>>({
    url: '/dataplatform/asset/count/category',
    method: 'get',
    params: { projectId }
  });
}

/**
 * 按类型统计资产数量
 */
export function countByType(projectId?: number) {
  return request<Record<string, number>>({
    url: '/dataplatform/asset/count/type',
    method: 'get',
    params: { projectId }
  });
}

/**
 * 按分级统计资产数量
 */
export function countByLevel(projectId?: number) {
  return request<Record<string, number>>({
    url: '/dataplatform/asset/count/level',
    method: 'get',
    params: { projectId }
  });
}

// ==================== 资产分类管理 ====================

/**
 * 查询资产分类树
 */
export function getCategoryTree(projectId?: number) {
  return request<AssetCategory[]>({
    url: '/dataplatform/asset/category/tree',
    method: 'get',
    params: { projectId }
  });
}

/**
 * 查询资产分类列表
 */
export function getCategoryList(params?: { projectId?: number }) {
  return request<AssetCategory[]>({
    url: '/dataplatform/asset/category/list',
    method: 'get',
    params
  });
}

/**
 * 查询资产分类详情
 */
export function getCategory(id: number) {
  return request<AssetCategory>({
    url: `/dataplatform/asset/category/${id}`,
    method: 'get'
  });
}

/**
 * 新增资产分类
 */
export function addCategory(data: AssetCategory) {
  return request<number>({
    url: '/dataplatform/asset/category',
    method: 'post',
    data
  });
}

/**
 * 修改资产分类
 */
export function updateCategory(data: AssetCategory) {
  return request<void>({
    url: '/dataplatform/asset/category',
    method: 'put',
    data
  });
}

/**
 * 删除资产分类
 */
export function deleteCategory(ids: number | number[]) {
  return request<void>({
    url: `/dataplatform/asset/category/${ids}`,
    method: 'delete'
  });
}
